import fs from 'fs-extra';
import path from 'path';
import { glob } from 'glob';

/**
 * 文件操作工具类
 */
export class FileUtils {
  /**
   * 查找匹配特定模式的文件
   * @param pattern 文件匹配模式
   * @returns 文件路径数组
   */
  public static async findFiles(pattern: string): Promise<string[]> {
    try {
      return await glob(pattern);
    } catch (error) {
      console.error(`查找文件失败: ${error}`);
      return [];
    }
  }

  /**
   * 检查文件是否存在
   * @param filePath 文件路径
   * @returns 是否存在
   */
  public static async fileExists(filePath: string): Promise<boolean> {
    try {
      return await fs.pathExists(filePath);
    } catch (error) {
      console.error(`检查文件存在性失败: ${error}`);
      return false;
    }
  }

  /**
   * 获取文件状态信息
   * @param filePath 文件路径
   * @returns 文件状态信息
   */
  public static async getFileStats(filePath: string): Promise<fs.Stats | null> {
    try {
      return await fs.stat(filePath);
    } catch (error) {
      console.error(`获取文件状态信息失败: ${error}`);
      return null;
    }
  }

  /**
   * 读取文件内容
   * @param filePath 文件路径
   * @returns 文件内容
   */
  public static async readFile(filePath: string): Promise<string | null> {
    try {
      return await fs.readFile(filePath, 'utf-8');
    } catch (error) {
      console.error(`读取文件内容失败: ${error}`);
      return null;
    }
  }

  /**
   * 将文件路径规范化为使用正斜杠的格式
   * @param filePath 文件路径
   * @returns 规范化的文件路径
   */
  public static normalizePath(filePath: string): string {
    return filePath.replace(/\\/g, '/');
  }

  /**
   * 获取相对于项目根目录的路径
   * @param filePath 文件路径
   * @returns 相对路径
   */
  public static getRelativePath(filePath: string): string {
    return path.relative(process.cwd(), filePath);
  }

  /**
   * 获取绝对路径
   * @param filePath 文件路径
   * @returns 绝对路径
   */
  public static getAbsolutePath(filePath: string): string {
    return path.isAbsolute(filePath) 
      ? filePath 
      : path.resolve(process.cwd(), filePath);
  }
} 